#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>

//typedef int BTDataType;
//typedef struct BinaryTreeNode
//{
//	BTDataType data;
//	struct BinaryTreeNode* left;
//	struct BinaryTreeNode* right;
//}BTNode;
//
//void BinaryTreeLevelOrder(BTNode* root)
//{
//	Queue q;
//	QInit(&q);
//
//	if (root)
//		QPush(&q, root);
//
//	while (!QEmpty(&q))
//	{
//		BTNode* front = QFront(&q);
//		QPop(&q);
//		printf("%c ", front->data);
//
//		if (front->left)
//			QPush(&q, front->left);
//
//		if (front->right)
//			QPush(&q, front->right);
//	}
//
//	QDestroy(&q);
//}
//
//bool BinaryTreeComplete(BTNode* root)
//{
//	Queue q;
//	QInit(&q);
//
//	if (root)
//		QPush(&q, root);
//
//	while (!QEmpty(&q))
//	{
//		BTNode* front = QFront(&q);
//		QPop(&q);
//
//		if (front)
//		{
//			QPush(&q, front->left);
//			QPush(&q, front->right);
//		}
//		else
//		{
//			break;
//		}
//	}
//
//	while (!QEmpty(&q))
//	{
//		BTNode* front = QFront(&q);
//		QPop(&q);
//
//		if (front)
//			return false;
//	}
//
//	return true;
//}
//
//
//BTNode* BuyNode(BTDataType x)
//{
//	BTNode* node = (BTNode*)malloc(sizeof(BTNode));
//	if (node == NULL)
//	{
//		perror("malloc");
//		return NULL;
//	}
//
//	node->data = x;
//	node->left = NULL;
//	node->right = NULL;
//
//	return node;
//}
//
//int main()
//{
//	BTNode* node1 = BuyNode(1);
//	BTNode* node2 = BuyNode(2);
//	BTNode* node3 = BuyNode(3);
//	BTNode* node4 = BuyNode(4);
//	BTNode* node5 = BuyNode(5);
//	BTNode* node6 = BuyNode(6);
//
//	node1->left = node2;
//	node1->right = node4;
//	node2->left = node3;
//	node4->left = node5;
//	node4->right = node6;
//
//	return 0;
//}